筆者大學時沒認真上課,C++ 會的跟C差不多,可能比C語言多個Class
跟 C++11 smart pointers 的皮毛而已,馬步沒扎穩,寫程式總是無法非常得心應手。這幾年C++ 逐步演進,若再不更新相關知識,只怕會越來越落後,希望藉此次機會可以在C++26定案前,將過去欠的C++債儘量補起來,讓自己可以更熟悉這門語言,也作為 C++ 的學習筆記給各位讀者和未來的我批評。若文章中有錯或是有更好的表達方式還請各位多多鞭策小弟。學習任何一種語言,最基本的心態是「語言是要花一生來學習的」,只要這語言一直在被人使用和進化,就沒有學完的一天。
這邊收集了一些我個人覺得不錯的學習資源跟工具,也是接下來我主要的參考資源。大多是英文,主要是第一手資料還是要看英文,外加現在人工智慧的翻譯很強,可以使用AI翻譯或解釋。繁體中文的閱讀者在搜尋繁體中文的資料很快,附在這裡的效益我覺得不高。若有推薦的可以在留言處幫忙補充,我會一起更新,不限語言。
這邊選這兩本中文書,是因為這兩本書涉及電腦底層的運作和函式庫以及編譯器等相關知識對於學習 C/C++ 相當有幫助也比較容易理解
grammar
//
// 變數
int a = 0;
char a{'a'};
// 常數
const double PI = 3.1415926;
#define ACCLERATE 9.8
const int a; // 以初始化為 0
a = 3; // compile error: 在初始化後,程式內的常數便不可更改(immutable)
int sum = 1+1; // 數學運算
int twice = a << 1 | sum; // 位元運算
unsigned int pos_num = 123; // unsigned 無號數,自然數
bool flag = (a> 1 || sum < 4); // 邏輯運算
更多的變數和types 可以參考https://en.cppreference.com/w/cpp/language/types.html
由一對大括號{}組成,scope 內的變數生命週期和scope 外是獨立不相關的,且僅存於scope內
int a = 3;
{
int a = 4;
}
int b = a+1; // 這邊是第一行的a
if(condition) {
... // 條件滿足做的事
} else {
... // 條件不滿足做的事
}
// 可以只在條件滿足時做事
if(condition) {
...
}
if(condition1) {
// 條件1 滿足時做的事
} else if(condition2) {
// 條件2 滿足時做的事
} else {
// 都不滿足時做的事,不需要做事時,可以拿掉else 區塊
}
// (迴圈變數初始化; 迴圈條件; 迴圈變數迭代更新)
for(int a=0; a<5; a+=1) {
...
}
// 條件滿足時才會進入迴圈
while(a == b) {
...
}
// 先執行區塊內的事,再檢查條件,條件滿足才會在進入迴圈
do {
...
} while(condition)
int a = 5;
for(int i=0; i<10; i++) {
if(i == 5) {
break; // 跳出for loop,不在執行迴圈
}
a += 1; // i 等於5後,a再也不會被更新
}
int i=0;
while(i<10) {
if( i == 5) {
i += 1;
continue; // 跳出if block 但是會繼續執行while 迴圈
}
a += 1; // 只有當 i 為5 時,a 不會被更新
i += 1;
}
int a = get_from_input();
switch(a) {
case 3: // a == 3 開始執行
...
...
...
break; // a == 3 執行到這
case 4: // a == 4 開始執行
...
...
...
case 5: // a == 5 開始執行
...
break; // a== 4 or a == 5 都會執行到這
default: // 其他條件 開始執行
...
break; // 其他條件 結束執行
}
語法: 回傳型態 函式名稱([參數列表] type1 name1, type2 name2, ...)
void print() {
...
}
int sum(int a, int b) {
return a+b;
}
那第一天就先到這